#include<vector>
using namespace std;
class Solution {
public:
    int maxProduct(vector<int>& nums) {
        //状态表示 dp[i] 以i位置为结尾的子数组乘积
        //              [0]最小 [1]最大
        vector<vector<int>>dp(nums.size(),vector<int>(2,0));             
        dp[0][0]=nums[0],dp[0][1]=nums[0];
        int ans=nums[0];
        for(int i=1;i<nums.size();i++){
            dp[i][0]=min((nums[i]>0?dp[i-1][0]*nums[i]:dp[i-1][1]*nums[i]),nums[i]);
            dp[i][1]=max((nums[i]>0?dp[i-1][1]*nums[i]:dp[i-1][0]*nums[i]),nums[i]);
            ans=max(ans,dp[i][1]);
        }
        return ans;
    }
};